package org.shj.thread.basic;

import java.util.concurrent.CyclicBarrier;

import org.shj.thread.util.Util;

/**
 * CyclicBarrier, 让一组线程到达一个屏障（也叫同步点）时被阻塞，直到最后一个线程到达屏障时，
 * 屏障才会开门，所有被屏障拦截的线程才会继续运行
 * 
 * @author huangjian
 *
 */
public class CyclicBarrierDemo {
	
	//CyclicBarrier(int parties), 参数表示屏障拦截的线程数量，每个线程调用 await() 方法告诉 CyclicBarrier我已经到达了屏障，
	//然后当前线程被阻塞。
	static CyclicBarrier c = new CyclicBarrier(2);

	public static void main(String[] args) {
		new Thread(new Runnable(){
			public void run(){
				try{
					c.await();
					System.out.println("1111");
					Util.sleep(2);
					System.out.println("2222");
				}catch(Exception e){}
				
				System.out.println(1);
			}
		}).start();
		
		try{
			Util.sleep(2);
			System.out.println("3333");
			c.await();
			System.out.println("4444");
		}catch(Exception e){}
		System.out.println(2);

	}

}
